package zw_401_500.zw_495_提莫攻击;

class Solution {

    public static void main(String[] args) {
        int[] timeSeries = {1, 2};
        int duration = 2;
        int ans = findPoisonedDuration(timeSeries, duration);
        System.out.println(ans);
    }


    /**
     * 先中毒时间拉满，再减去重复的时间。
     *
     * @param timeSeries
     * @param duration
     * @return
     */
    public static int findPoisonedDuration(int[] timeSeries, int duration) {
        int res = timeSeries.length * duration;
        for (int i = 1; i < timeSeries.length; i++) {
            if (timeSeries[i] - timeSeries[i - 1] < duration) {
                res -= duration - timeSeries[i] + timeSeries[i - 1];
            }
        }
        return res;
    }


    /**
     * 题目已确保 timeSeries 为非递减排序，按照顺序进行遍历处理即可。
     * 我们使用 ans 统计答案，使用 last 记录上一次攻击的结束点，对于任意的 timeSeries[i] 而言，
     * 假设其发起点为 s=timeSeries[i]，结束点为 e=s+duration−1，针对 last 和 s 进行分情况讨论即可：
     * last<s ：两次攻击不重合，则有 ans += duration; last = e;
     * last>=s ：两次攻击重合，则有 ans += e - last; last = e
     *
     * @param timeSeries
     * @param duration
     * @return
     */
//    public static int findPoisonedDuration(int[] timeSeries, int duration) {
//        int ans = 0, last = -1;
//        for (int s : timeSeries) {
//            int e = s + duration - 1;
//            ans += last < s ? duration : e - last;
//            last = e;
//        }
//        return ans;
//    }

    /**
     * 超时
     *
     * @param timeSeries
     * @param duration
     * @return
     */
//    public static int findPoisonedDuration(int[] timeSeries, int duration) {
//        int len = timeSeries.length;
//        int[] nums = new int[timeSeries[len - 1] + duration];
//        for (int i = 0; i < len; i++) {
//            for (int j = 0; j < duration; j++) {
//                nums[timeSeries[i] + j] = 1;
//            }
//        }
//        int count = 0;
//        for (int num : nums) {
//            if (num == 1) count++;
//        }
//        return count;
//    }
}
